package top.huhuiyu.study.javawebjdbc.dao;

import top.huhuiyu.study.javawebjdbc.entity.TbClass;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 * @author 胡辉煜
 */
public class TbClassDAO {
  // jdbc：java数据库连接
  // dao：数据访问对象
  // entity：实体类，一般就是描述数据的类
  // java.sql.Connection类就是数据库的连接类

  // 仿造上课的班级管理完成新闻管理功能
  // 开发次序：1：实体类，2：对应的dao，添加、查询、删除、3：完成测试，4：完成jsp页面
  // 思考题：
  // 仿造新闻管理，完成公告管理的功能
  // 公告的信息包括主键，公告的标题，公告的内容，公告的发布人姓名，公告的发布时间
  // 添加难点，就是多一个是否置顶的字段，类型是int，0表示不置顶，1表示置顶
  public static int insert(TbClass tbClass) throws SQLException {
    // 连接数据库
    Connection conn = DBHelper.getConnection();
    // 预备添加的语句,一个?表示一个参数
    String sql = "insert into tb_class(classname, classinfo) values(?,?)";
    // java的预处理sql语句
    PreparedStatement ps = conn.prepareStatement(sql);
    // 设置?参数对应的值
    ps.setString(1, tbClass.getClassname());
    ps.setString(2, tbClass.getClassinfo());
    // 执行语句并获取语句影响的行数
    int i = ps.executeUpdate();
    // 关闭数据库连接
    conn.close();
    return i;
  }

  public static List<TbClass> query() throws SQLException {
    List<TbClass> list = new ArrayList<>();
    // 数据库连接
    Connection conn = DBHelper.getConnection();
    // 查询语句
    String sql = "select * from tb_class";
    // 预处理sql语句
    PreparedStatement ps = conn.prepareStatement(sql);
    // 执行查询并返回结果集
    ResultSet rs = ps.executeQuery();
    // 查询结果集的next是读取下一行数据，如果读取到就返回真，否则就是假
    while (rs.next()) {
      // 将数据库的记录转换成java对象
      TbClass tbClass = new TbClass();
      // rs.get数据类型("数据表中字段名称")就是获取查询结果中指定字段的数据
      tbClass.setId(rs.getInt("id"));
      tbClass.setClassname(rs.getString("classname"));
      tbClass.setClassinfo(rs.getString("classinfo"));
      // java的Date类型对应的是数据库api的Timestamp类型
      tbClass.setCreated(rs.getTimestamp("created"));
      // 添加到集合
      list.add(tbClass);
    }

    conn.close();
    return list;
  }

  public static int delete(Integer id) throws SQLException {
    Connection conn = DBHelper.getConnection();
    String sql = "delete from tb_class where id = ?";
    PreparedStatement ps = conn.prepareStatement(sql);
    ps.setInt(1, id);
    int i = ps.executeUpdate();
    conn.close();
    return i;
  }

}
